package sv.gob.mtps.sib.controller;
 

import java.util.Map;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import sv.gob.mtps.sib.model.Producto;
import sv.gob.mtps.sib.model.Unidadmedida;
import sv.gob.mtps.sib.service.ProductoService;
import sv.gob.mtps.sib.service.UnidadmedidaService;

@Controller
public class ProductoController {
	
	@Autowired
    private ProductoService productoService;
	
	@Autowired
    private UnidadmedidaService unidadmedidaService;
	
	@RequestMapping("/admin/errProducto")
    public String err(ModelMap map,@ModelAttribute("producto")
    @Valid Producto producto, BindingResult result) {		
		System.out.println(producto.getDescripcionProducto());
			map.put("producto",(Producto) producto);
			map.put("productoList", productoService.listProducto());			
			map.put("unidadmedidaList", unidadmedidaService.listUnidadmedida());		
        return "/admin/producto";
    }
	
	@RequestMapping("/admin/producto")
    public String listProductos(Map<String, Object> map) {		
			map.put("producto", new Producto());
			map.put("productoList", productoService.listProducto());			
			map.put("unidadmedidaList", unidadmedidaService.listUnidadmedida());
        return "/admin/producto";
    }
 
	@RequestMapping(value = "/admin/producto/add", method = RequestMethod.POST)
    public ModelAndView addProducto(@ModelAttribute("producto")
    @Valid Producto producto, BindingResult result) {
		
		if(result.hasErrors()){
			ModelMap map = new ModelAndView("redirect:/admin/producto/add").getModelMap();
			return	new ModelAndView("redirect:/admin/errProducto", map);
		}
		else{			
			productoService.addProducto(producto); 
	        return new ModelAndView("redirect:/admin/producto");
		}
		
    }
	
	@RequestMapping(value = "/admin/producto/edit", method = RequestMethod.POST)
    public String updateProducto(@ModelAttribute("producto")
    Producto producto, BindingResult result) {
		//Unidadmedida unidad = unidadmedidaService.findUnidadmedida(producto.getUnidadmedida().getIdUnidadmedida());		
		//producto.setUnidadmedida(unidad);
		//System.out.println(producto.getUnidadmedida().getUnidadmedida());
		productoService.editProducto(producto);		
        return "redirect:/admin/producto";
    }
	
	@RequestMapping(value ="/admin/producto/delete", method = RequestMethod.POST)
	public String deleteProducto(@ModelAttribute("producto")
    Producto producto, BindingResult result) { 
        productoService.removeProducto(producto.getIdProducto()); 
        return "redirect:/admin/producto";
    }

}
